package cn.nb12.xbox;

import java.lang.reflect.Method;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.nb12.xbox.utils.SpringContextUtil;

/**
 * 超级服务处理
 * 所有的业务处理都从此处进入
 * @author yh
 *
 */
public class IService {
	
	private Logger log= LoggerFactory.getLogger(IService.class);
	
	/**
	 * 默认处理方法名
	 */
	public static String methodName="dowk";
	 
	
	/**
	 * 业务处理
	 * @param serviceName 服务名
	 * @param method 方法名
	 * @param key 锁
	 * @param data 参数
	 * @return 返回处理结果
	 */
	public Object handle(String serviceName,String method,String key,Map<String,Object> data){
		//没有找到服务名
		if(serviceName==null || "".equals(serviceName)) {
			log.error("服务名不能为空");
			return null;
		}
		
		//获得服务
		Object bean = SpringContextUtil.getBean(serviceName);
	
		if(bean==null) {
			log.error("没有找到服务"+serviceName);
			return null;
		}
		
		Class<? extends Object> clz = bean.getClass();//获得服务的class
		Method mt=null;//方法
		
		try {
			if(method==null || "".equals(method)) {
				mt=clz.getMethod(methodName, Map.class);
			}
			else {
				mt= clz.getMethod(method, Map.class);
			}
		} catch (Exception e) {
			log.error("没有找到对应方法",e);
			return null;
		}
		
		//执行方法
		try {
			if(key==null || "".equals(key)) {//锁为空
				return mt.invoke(bean, data);
			}
			else {
				synchronized (key.intern()) {
					return mt.invoke(bean, data);
				}
			}
			
		} catch (Exception e) {
			log.error("方法执行错误",e);
			return null;
		}
	}
}
